package com.hmkj.core.service.order;

import com.hmkj.core.model.order.OrderSimulateModel;
import com.hmkj.core.po.order.OrderSimulate;
import com.hmkj.core.service.base.GenericService;

import java.math.BigDecimal;
import java.util.List;

/**
 * 模拟策略表业务相关Service接口<br>
 *
 * @ClassName: OrderSimulateService
 * @author eproo
 * @date   2017-11-10 11:33:05
 */
public interface OrderSimulateService extends GenericService<Integer, OrderSimulate> {
    /**
     * 接单
     * @param orderSimulate
     */
    void takingOrder(OrderSimulate orderSimulate);

    /**
     * 流单
     * @param orderSimulate
     */
    void flowOrder(OrderSimulate orderSimulate);

    /**
     * 撤单
     * @param orderSimulate
     */
    void cancelOrder(OrderSimulate orderSimulate);

    /**
     * 交易汇总
     */
    List<OrderSimulateModel> userSum();

    /**
     * 模拟策略下单
     *
     * @param userId       用户ID
     * @param commoId      品种ID
     * @param num          交易数量
     * @param lostPoint    止损点数
     * @param point        积分抵扣
     * @param openWay      开仓类型
     * @param direction    交易方向
     * @param entrustPrice 委托价格（限价单使用）
     * @param resource     订单来源
     */
    void doTrade(Integer userId, Integer commoId, Integer num, Integer lostPoint, Integer point, Integer openWay, Integer direction, BigDecimal entrustPrice, String resource);

    /**
     * 限价单行情驱动下单
     *
     * @param commoId 品种ID
     * @param np      最新价
     */
    void doLimitOrderTrade(Integer commoId, BigDecimal np);


    /**
     * 平仓
     * @param orderSimulate 模拟订单
     * @param number 平仓数量
     * @param coverType 平仓类型
     */
    void coverOrderSimulate(OrderSimulate orderSimulate,int number,int coverType);

    /**
     * 止盈止损平仓
     *
     * @param np        最新价
     * @param commoCode 品种代码
     */
    void doCoverByLostProfit(BigDecimal np, String commoCode);

}
